home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / book / src / comp_log.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  3KB  |  114 lines

  1. #include <stdio.h>
  2. #include <stdefs.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. const   char    *compile_log = "comp.log";
  7. struct  tm      tm;
  8.  
  9. FILE    *pathopen(const char *path, char *mode)
  10. {
  11. FILE    *fp;
  12.  
  13.     if ((fp = fopen(path, mode)) == NULL) {
  14.         fprintf(stderr, "can't open %s(mode '%s')\n", path, mode);
  15.         exit(1);
  16.     }
  17.     return fp;
  18. }
  19.  
  20. void    read_version(const char *path, int *ver_hi, int *ver_lo)
  21. {
  22. FILE    *fp;
  23.  
  24.     fp = pathopen(path, "r");
  25.     if (fscanf(fp, "=== Version %d.%d", ver_hi, ver_lo) != 2) {
  26.         *ver_hi = *ver_lo = -1;
  27.     }
  28.     fclose(fp);
  29. }
  30. void    write_version(const char *path, int ver_hi, int ver_lo)
  31. {
  32. FILE    *fp;
  33.  
  34.     fp = pathopen(path, "w");
  35.     fprintf(fp, "=== Version %d.%d ===    %d/%d/%d %d:%d:%d\n",
  36.         ver_hi, ver_lo,
  37.         tm.tm_year,tm.tm_mon+1,tm.tm_mday, tm.tm_hour,tm.tm_min,tm.tm_sec);
  38.     fclose(fp);
  39. }
  40.  
  41. void    rewrite_c_source(char *path, int ver_hi, int ver_lo)
  42. {
  43. FILE    *in, *out;
  44. char    *temp = "$$$$temp.$$$";
  45. char    buf[256];
  46. int     num = 0;
  47. time_t  t;
  48.  
  49.     t = time(NULL);
  50.     tm = *localtime(&t);
  51.  
  52.     in  = pathopen(path, "r");
  53.     out = pathopen(temp, "w");
  54.  
  55.     while (fgets(buf,255,in), !feof(in))
  56.     {
  57.         if (*buf == '#' && num == 0) {
  58.             fprintf(out, "#define VERSION  \"%d.%d\"\n", ver_hi, ver_lo);
  59.             num++;
  60.         } else if( *buf == '#' && num == 1) {
  61.             fprintf(out, "#define _VERSION \"%d.%d\"\n", ver_hi, ver_lo);
  62.             num++;
  63.         } else if( *buf == '#' && num == 2) {
  64.             strftime(buf, 255, "%b %d %Y", &tm);
  65.             fprintf(out, "#define _DATE    \"%s\"\n", buf);
  66.             num++;
  67.         } else if( *buf == '#' && num == 3) {
  68.             strftime(buf, 255, "%X", &tm);
  69.             fprintf(out, "#define _TIME    \"%s\"\n", buf);
  70.             num++;
  71.         } else {
  72.             fputs(buf,out);
  73.         }
  74.     }
  75.     fclose(in);
  76.     fclose(out);
  77.  
  78.     remove(path);
  79.     rename(temp, path);
  80. }
  81.  
  82.  
  83. int     main(void)
  84. {
  85. int     ver_hi, ver_lo;
  86.  
  87.     /*  バージョンナンバーログを読む  */
  88.     read_version(compile_log, &ver_hi,&ver_lo);
  89.  
  90.     /*  まともな番号かどうか調べる  */
  91.     if (ver_hi < 0 || ver_lo < 0) {
  92.         fprintf(stderr, "illegal data in file <%s>\n", compile_log);
  93.         exit(1);
  94.     }
  95.  
  96. #if 0
  97.     /*  バージョンナンバーを 0.001 増加する  */
  98.     if ((++ver_lo) % 10 == 0)
  99.         ver_lo -= 10;
  100.     ver_hi += ver_lo / 1000;
  101.     ver_lo %= 1000;
  102. #endif
  103.  
  104.     /*  バージョン番号と日時をソースファイルに書き込む  */
  105.     rewrite_c_source("version.c", ver_hi,ver_lo);
  106.  
  107.     printf("version %d.%d\n", ver_hi, ver_lo);
  108.  
  109.     /*  ログファイルに書き込んでおく  */
  110.     write_version(compile_log, ver_hi,ver_lo);
  111.  
  112.     return 0;
  113. }
  114.